package com.yu.Service;

import com.yu.DAO.*;
import com.yu.POJO.Course;
import com.yu.POJO.Sc;
import com.yu.POJO.Student;
import com.yu.POJO.Teacher;
import com.yu.tool.MyJson;
import com.yu.tool.pageTool;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * Created with IntelliJ IDEA.
 *
 * @Author: LittleFisher
 * @Date: 2021/05/23/16:29
 * @Description:
 */
@Service
public class StuServiceImpl implements StuService{
    @Autowired
    private StudentDao sd;
    @Autowired
    private clazzDao cd;
    @Autowired
    private StuInfoDao sid;
    @Autowired
    private CourseDao courseDao;
    @Autowired
    private ScDao scd;
    @Autowired
    private TeacherDao td;
    @Autowired
    private CourseDao CD;

    /**
     * 通过学号寻找学生
     * @param sno 学号
     * @return
     */
    @Override
    public Student findStuBySno(String sno) {
        return sd.findStuBySno(sno);
    }

    /**
     * 通过id寻找学生
     * @param id
     * @return
     */
    @Override
    public Student findStuByID(int id) {
        Student student = sd.findStuByID(id);
        student.setClazz(cd.findClazzByID(student.getClazz_id()));
        student.setStuInfo(sid.findStuInfoByID(id));
        student.clazz_InfoToStu();
        return student;
    }

    /**
     *  登录判定
     * @param sno 用户输入的学号
     * @param password 用户输入密码
     * @return MyJson
     */
    @Override
    public MyJson stuLogin(String sno,String password) {
        MyJson myJson = new MyJson();
        Student stu = sd.findStuBySno(sno);

        if(stu==null){
            myJson.setMsg(false);
            myJson.setError("查无此人");
            return myJson;
        }

        if(password.equals(stu.getPassword())){
            myJson.setMsg(true);
        } else {
            myJson.setMsg(false);
            myJson.setError("密码错误");
        }

        return myJson;
    }

    /**
     * 更新密码
     * @param id
     * @param old
     * @param newp 新密码
     * @return
     */
    @Override
    public MyJson stuUpPass(int id,String old,String newp){
        MyJson myJson = new MyJson();
        Student student = sd.findStuByID(id);
        if(student==null){
            myJson.setMsg(false);
            myJson.setError("数据库错误");
            return myJson;
        }
        if(student.getPassword().equals(old)){//判断旧密码是否正确
        }else{
            myJson.setMsg(false);
            myJson.setError("旧密码错误");
            return myJson;
        }
        if(sd.updateStuPassword(id,newp)>0){
            myJson.setMsg(true);
        }else {
            myJson.setMsg(false);
            myJson.setError("数据库错误");
        }
        return myJson;
    }

    /**
     *  没用上
     * @param stu
     * @return
     */
    @Override
    public int updateStu(Student stu) {
        return sd.updateStu(stu);
    }

    /**
     *  通过学生的id查询学生的课程
     * @param id 学生id
     * @return
     */
    @Override
    public List<Course> getStuCourses(int id) {
        List<Sc> scs = scd.getStuScByStu_Id(id);
        List<Course> courses = new ArrayList<Course>();
        for (Sc sc:scs) {
            Course course =courseDao.getCourseByID(sc.getCourse_id());
            if(course!=null){
                Teacher tea = td.findTeacherById(course.getTea_id());
                if (tea!=null){
                    course.setTea_name(tea.getName());
                    courses.add(course);
                }
            }
        }
        return courses;
    }

    /**
     *  获取学生的选课情况
     * @param id 学生id
     * @return
     */
    @Override
    public List<Sc> getStuSc(int id){
        List<Sc> list = scd.getStuScByStu_Id(id);

        for (Sc sc:list) {
            if(CD.getCourseByID(sc.getCourse_id())!=null){
                sc.setCourse_name(CD.getCourseByID(sc.getCourse_id()).getName());
            }
        }
        return list;
    }

    /**
     *  获取所有当年选修课
     * @param page 当前分页
     * @param rows 一页行数
     * @param c_type  课程类型 选修;
     * @return pageTool 选修课
     */
    @Override
    public pageTool getSelectCourse(int page, int rows, String c_type){
        pageTool pt = new pageTool();

        int start= (page - 1) * rows;
        int end = start+rows;

        //获取当前年份作为查询条件
        Date date = new Date();
        SimpleDateFormat df = new SimpleDateFormat("yyyy");
        String year = df.format(date);
        int nextYear = Integer.parseInt(year)+1;
        String c_year = year+"-"+nextYear;

        int total = CD.getCourseTotalByType(c_type,c_year);
        List<Course> list = CD.getAllCourseByType(start,end,c_type,c_year);
        for (Course course:list) {
            Teacher tea = td.findTeacherById(course.getTea_id());
            if(tea!=null){//防止为空的时候报错
                course.setTea_name(tea.getName());
            }
        }

        pt.setTotal(total);
        pt.setRows(list);
        return pt;
    }

    /**
     *  学生加入课程
     * @param course_id 课程id
     * @param stu_id 学生id
     * @return
     */
    @Override
    public MyJson joinSelectCourse(int course_id, int stu_id){
        MyJson myJson = new MyJson();
        if(scd.CourseIsSelect(course_id,stu_id)!=null){
            myJson.setMsg(false);
            myJson.setError("你已经选了该课");
            return myJson;
        }
        if (scd.countCourse(course_id)>64){
            myJson.setMsg(false);
            myJson.setError("人数已满");
            return myJson;
        }
        if(scd.addSC(course_id,stu_id)>0){
            myJson.setMsg(true);
        }else {
            myJson.setMsg(false);
            myJson.setError("加入失败");
        }

        return myJson;
    }


}
